package Harmonisation;

import java.util.ArrayList;

import Exception.ArbreCheminBloqueException;
import Exception.ExtensionFichierException;
import Exception.NombreArgumentInvalideException;
import Exception.OptionException;
import Harmonisation.CreationDuChant.GrapheAccords;
import Harmonisation.CreationDuChant.GrapheNotes;

public class Harmonisation
{
	private GrapheNotes grapheNote;
	private GrapheAccords grapheAccord;
	@SuppressWarnings("unused")
	private ArrayList<Note> voixSoprano;
	
	public Harmonisation(ArrayList<Note> voixSoprano)
	{
		this.voixSoprano = voixSoprano;
		this.grapheAccord = new GrapheAccords();
		try
		{
			 this.grapheNote = new GrapheNotes(voixSoprano, grapheAccord.getAccordPossibleSopranoAChaqueTemps(voixSoprano));
			 
		} catch (ArbreCheminBloqueException e)
		{
			e.printStackTrace();
		}	
	}
	

	public Chant generationChantAleatoire()
	{
		return this.grapheNote.genererChantAleatoire();	
	}

	public Chant genererChantBeaute(int facteur)
	{
		return this.grapheNote.genererPlusBelleHarmonie(facteur);
	}

	public long nombreHarmonisations()
	{
		return this.grapheNote.nombreHarmonisation();
	}
	
	

	
	public static void main(String[] args)
	{
		LecteurOption lecteurOption = new LecteurOption(args);
		try
		{
			lecteurOption.analyserOption();

		} catch (OptionException e)
		{
			e.printStackTrace();
		} catch (NombreArgumentInvalideException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ExtensionFichierException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

	public GrapheAccords getGrapheAccord()
	{
		return grapheAccord;
	}


	public void setGrapheAccord(GrapheAccords grapheAccord)
	{
		this.grapheAccord = grapheAccord;
	}



}
